<?xml version="1.0"?>
<ScatterFile xmlns="http://schemas.microsoft.com/netmf/ScatterfileSchema.xsd">

	<!-- CQ_FRK_FM3 -->
	<!-- FM3 Memory Map -->
	<!-- 0x00000000 - 0x000FFFFF	flash memory 1024KB -->
	<!-- 0x1FFF0000 - 0x2000FFFF	RAM 128KB -->

	<Set Name="EXT_SRAM" Value="false"/>

    <If Name="TARGETLOCATION" In="FLASH">
		<Set Name="Code_BaseAddress"		Value="0x00000000"/>
		<Set Name="Code_Size"				Value="0x000A0000"/>    
		<Set Name="Deploy_BaseAddress"		Value="0x000A0000"/>    
		<Set Name="Code_Size"				Value="%Deploy_BaseAddress - Code_BaseAddress%"/>    
		<Set Name="Config_BaseAddress"		Value="0x000E0000"/>    
		<Set Name="Config_Size"				Value="0x00001000"/>
		<Set Name="Custom_Heap_Begin"		Value="0x2000D800"/>
		<Set Name="Custom_Heap_End"			Value="0x2000DFF8"/>    
		<Set Name="Stack_Bottom"			Value="0x2000E000"/>
		<Set Name="Stack_Top"				Value="0x2000FFF8"/>
		<If Name = "EXT_SRAM" Value="true">
			<Set Name="Heap_Begin"				Value="0x60000000"/>
			<Set Name="Heap_End"				Value="0x6007FFF8"/>
			<Set Name="ER_RAM_RO_BaseAddress"	Value="0x1FFF0000"/>    
        	<Set Name="ER_RAM_RO_Size"			Value="%Custom_Heap_Begin%-%ER_RAM_RO_BaseAddress%"/>    
		</If>
		<If Name = "EXT_SRAM" Value="false">
			<Set Name="Heap_Begin"				Value="0x1FFF6A00"/>
			<Set Name="Heap_End"				Value="0x2000D7F8"/>    
			<Set Name="ER_RAM_RO_BaseAddress"	Value="0x1FFF0000"/>    
        	<Set Name="ER_RAM_RO_Size"			Value="%Heap_Begin%-%ER_RAM_RO_BaseAddress%"/>    
		</If>
        <Set Name="Valid"               	Value="true"/>
    </If>

    <If Name="TARGETLOCATION" In="RAM">
		<Set Name="Heap_Begin"			Value="0x20007000"/>
		<Set Name="Heap_End"			Value="0x2000DFF8"/>    
		<Set Name="Custom_Heap_Begin"	Value="0x2000E000"/>
		<Set Name="Custom_Heap_End"		Value="0x2000EFF8"/>  
		<Set Name="Stack_Bottom"		Value="0x2000F000"/>
		<Set Name="Stack_Top"			Value="0x2000FFF8"/>
		
		<Set Name="Config_BaseAddress"		Value="0x0807D000"/>    
		<Set Name="Config_Size"				Value="0x00001000"/>
		<Set Name="Code_BaseAddress"		Value="0x08010000"/>    
		<Set Name="Deploy_BaseAddress"		Value="0x08074000"/>    
		<Set Name="Code_Size"				Value="%Deploy_BaseAddress - Code_BaseAddress%"/>
		<Set Name="ER_RAM_RO_BaseAddress"	Value="0x20000000"/>    
		<Set Name="ER_RAM_RO_Size"			Value="%Heap_Begin%-%ER_RAM_RO_BaseAddress%"/>    
        <Set Name="Valid"            		Value="true"/>
    </If>

    <!-- ################################################################################ -->

    <If Name="Valid" Value="false">
        <Error Message="Configuration not recognized"/>
    </If>

    <NamedGroup Name="MEMORY">
      <LoadRegion Name="LR_%TARGETLOCATION%" Base="%Code_BaseAddress%" Size="%Code_Size%"/>
      <IfDefined Name="Config_BaseAddress">
        <LoadRegion Name="LR_CONFIG" Base="%Config_BaseAddress%" Size="%Config_Size%"/>
      </IfDefined>
      <IfDefined Name="Data_BaseAddress">
        <LoadRegion Name="LR_DAT" Base="%Data_BaseAddress%" Size="%Data_Size%"/>
      </IfDefined>
      <LoadRegion Name="HEAP" Base="%Heap_Begin%" Size="%Heap_End - Heap_Begin% + 1"/>
      <LoadRegion Name="STACK" Base="%Stack_Bottom%" Size="%Stack_Top - Stack_Bottom% + 1"/>
      <LoadRegion Name="RELOC_RAM" Base="%ER_RAM_RO_BaseAddress%" Size="%ER_RAM_RO_Size%"/>
    </NamedGroup>

    <EntryPoint Name="EntryPoint"/>

    <NamedGroup Name="SECTIONS">

      <ExecRegion Name="ER_%TARGETLOCATION%" Options="&gt;LR_%TARGETLOCATION%">
        <FileMapping Name="*" Options="(text.EntryPoint)" />
        <FileMapping Name="*" Options="(SectionForBootstrapOperations)" />
        <FileMapping Name="*" Options="(text.*)" />
        <FileMapping Name="*" Options="(i.*)" />
        <FileMapping Name="*" Options="(t.*)" />
        <FileMapping Name="*" Options="(.text*)" />
        <FileMapping Name="*" Options="(.glue*)" />
        <If Name="TARGETLOCATION" In="RAM">     
          <FileMapping Name="*" Options="(SectionForFlashOperations)" />       
        </If>
        <FileMapping Name="*" Options="(.rodata*)" />
        <FileMapping Name="*" Options="(rodata)" />
        <FileMapping Name="*" Options="(.constdata*)" />
        <FileMapping Name="*" Options="(.conststring*)" />
        <IfNotDefined Name="Data_BaseAddress">
          <FileMapping Name="*" Options="(tinyclr_metadata)" />
        </IfNotDefined>
        <IfNotDefined Name="Config_BaseAddress">
          <FileMapping Name="*" Options="(SectionForConfig)" />
        </IfNotDefined>
        <Include File="%SPOCLIENT%\Solutions\CQ_FRK_FM3\scatterfile_gcc_missing_symbols.xml"/>
      </ExecRegion>
      
      <ExecRegion Name="ER_RAM_RO" Align="0x10" Options="&gt;RELOC_RAM AT&gt;LR_%TARGETLOCATION%">
<!--
        <Include File="%SPOCLIENT%\Solutions\CQ_FRK_FM3\TinyCLRNBL\scatterfile_tinyclr_ram_functions.xml"/>
-->
        <If Name="TARGETLOCATION" In="FLASH">     
          <FileMapping Name="*" Options="(SectionForFlashOperations)" />
        </If>
      </ExecRegion>
	
      <ExecRegion Name="ER_RAM_RW" Align="0x10" Options="&gt;RELOC_RAM AT&gt;LR_%TARGETLOCATION%">
        <FileMapping Name="*" Options="(rwdata)" />
        <FileMapping Name="*" Options="(.data*)" /> 
      </ExecRegion>

      <ExecRegion Name=".bss" Align="0x10" Options="&gt;RELOC_RAM">
        <FileMapping Name="*" Options="(.zidata*)" />
        <FileMapping Name="*" Options="(.bss*)" />
        <FileMapping Name="PROVIDE(__exidx_start = .);" />
        <FileMapping Name="PROVIDE(__exidx_end = .);" />
      </ExecRegion>
	  
      <ExecRegion Name="/DISCARD/">
        <FileMapping Name="*" Options="(.ARM.exidx*)" />
        <FileMapping Name="*" Options="(.ARM.extab*)" />
      </ExecRegion>

		<ExecRegion Name="ER_HEAP_BEGIN" Base="%Heap_Begin%">
		<FileMapping Name="*" Options="(SectionForHeapBegin)" />
		</ExecRegion>

		<ExecRegion Name="ER_HEAP_END" Base="%Heap_End%">
		<FileMapping Name="*" Options="(SectionForHeapEnd)" />
		</ExecRegion>

		<ExecRegion Name="ER_CUSTOM_HEAP_BEGIN" Base="%Custom_Heap_Begin%">
		<FileMapping Name="*" Options="(SectionForCustomHeapBegin)" />
		</ExecRegion>

		<ExecRegion Name="ER_CUSTOM_HEAP_END" Base="%Custom_Heap_End%">
		<FileMapping Name="*" Options="(SectionForCustomHeapEnd)" />
		</ExecRegion>

      <ExecRegion Name="ER_STACK_BOTTOM" Base="%Stack_Bottom%">
        <FileMapping Name="*" Options="(SectionForStackBottom)" />
      </ExecRegion>
	
      <ExecRegion Name="ER_STACK_TOP" Base="%Stack_Top%">
        <FileMapping Name="*" Options="(SectionForStackTop)" />
      </ExecRegion>

      <IfDefined Name="Config_BaseAddress">
        <ExecRegion Name="ER_CONFIG" Options="&gt;LR_CONFIG">
          <FileMapping Name="*" Options="(SectionForConfig)" />
        </ExecRegion>
      </IfDefined>
      
      <IfDefined Name="Data_BaseAddress">
        <ExecRegion Name="ER_DAT" Options="&gt;LR_DAT">
          <FileMapping Name="*" Options="(tinyclr_metadata)" />
        </ExecRegion>
      </IfDefined>
    </NamedGroup>

    <!-- The following variables are used to simulate the ones autogenerated by RVDS -->
    <GlobalVariable Name="Load$$ER_%TARGETLOCATION%$$Base"          Value="ADDR(ER_%TARGETLOCATION%)"/>
    <GlobalVariable Name="Image$$ER_%TARGETLOCATION%$$Length"       Value="SIZEOF(ER_%TARGETLOCATION%)"/>

    <GlobalVariable Name="Image$$ER_RAM_RO$$Base"                   Value="ADDR(ER_RAM_RO)"/>
    <GlobalVariable Name="Image$$ER_RAM_RO$$Length"                 Value="SIZEOF(ER_RAM_RO)"/>
    <GlobalVariable Name="Load$$ER_RAM_RO$$Base"                    Value="LOADADDR(ER_RAM_RO)"/>

    <GlobalVariable Name="Image$$ER_RAM_RW$$Base"                   Value="ADDR(ER_RAM_RW)"/>
    <GlobalVariable Name="Image$$ER_RAM_RW$$Length"                 Value="SIZEOF(ER_RAM_RW)"/>
    <GlobalVariable Name="Load$$ER_RAM_RW$$Base"                    Value="LOADADDR(ER_RAM_RW)"/>

    <GlobalVariable Name="Image$$ER_RAM_RW$$ZI$$Base"               Value="ADDR(.bss)"/>
    <GlobalVariable Name="Image$$ER_RAM_RW$$ZI$$Length"             Value="SIZEOF(.bss)"/>

    <GlobalVariable Name="__use_no_semihosting_swi"                 Value="0"/>
</ScatterFile>

